package mutilthread;

/**
 * Created with IntelliJ IDEA.
 * Description: 线程安全
 * User: Li_yizYa
 * Date: 2025—03—21
 * Time: 11:08
 */
public class Demo3 {
    private static int count = 0;
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                count++;//在cpu视角来看是三个指令（①把内存中的数据读取到cpu寄存器里；②把cpu寄存器里的数据+1；③把寄存器的值写回内存）
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                count++;
            }
        });
        //t1 和 t2 并发执行（多个线程并发执行引起的 bug~~，这样的 bug 称为“线程安全问题”或者叫做“线程不安全”）
        t1.start();;
        t2.start();
        t1.join();
        t2.join();

        System.out.println("count=" + count);
    }
    /**
     * 线程不安全问题示例（原因在于：随即调度，抢占式执行）
     * @param args
     * @throws InterruptedException
     */
    public static void main1(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
           for (int i = 0; i < 50000; i++) {
               count++;
           }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                count++;
            }
        });
        //t1 和 t2 并发执行（多个线程并发执行引起的 bug~~，这样的 bug 称为“线程安全问题”或者叫做“线程不安全”）
        t1.start();;
        t2.start();
        t1.join();
        t2.join();

//        t1 和 t2 串行执行（t1 先执行，t1 执行完成后，t2 再执行）
//        t1.start();;
//        t1.join();
//        t2.start();
//        t2.join();

        System.out.println("count=" + count);
    }
}
